昨天我們成功在Python Shell
新增Records
並把這些Records
抓出來顯示在網頁上,仔細觀察取得資料表紀錄的那行程式碼,就會發現我們並不是用SQL
去撈資料而是用資料表物件(Model Object
)自帶的方法去取得資料。
#昨天的程式碼
from django.http import HttpResponse
from django.template import loader
from .models import Members
def index(request):
#取得Members資料表上所有的Records
mymembers = Members.objects.all().values() #取得資料表紀錄
output = ""
for x in mymembers:
output += x["firstname"]
return HttpResponse(output)
那為什麼不是用SQL
而是靠資料表物件(Model Object
)去操作資料呢?
因為Django
的資料庫操作靠的是ORM
這個技術。
(圖片來源)
ORM
是Object Relational Mapping
的簡寫,中文翻譯是物件關聯對映,主要就是將資料庫的資料與物件(Object
)相互對應,再實際一點的說法,就是把Django
資料庫裡面的資料表(Model
)以物件(Object
)的型態召喚出來,接著就可以直接用這個物件做資料的CRUD
,而不用寫SQL
。
SQL
語言轉換的困擾SQL Injection
的問題SQL
出現SQL Injection : 資料庫收到惡意使用者所輸入的 SQL 指令,在未驗證的情況下就逕自執行,導致惡意使用者可以取得最高權限,進而對資料庫造成未知破壞,其中包括竊取、修改、刪除資料等等。
ORM
相對SQL
是一個新的觀念,會需要花時間理解不同方法的意義SQL
才能做到的事,用ORM
會很難做到一樣的事,導致最後還是要寫SQL綜合ORM
的優點與缺點,可以發現ORM
雖然使用上很簡單,但還是有它的侷限性,所以還是要學點SQL
會比較好解決複雜的問題。
今天沒有需要動手做的東西非常輕鬆,而明天依然會是
Django Models
的番外篇,要來稍微補充說明前面看起來很謎的migrate
和makemigrations
等等。